home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-07-09 | 2.7 KB | 113 lines | [TEXT/CWIE] |
- // MSAEClone.c
- //
- // Original version by Jon Lansdell and Nigel Humphreys.
- // 4.0 and 3.1 updates by Greg Sutton.
- // ©Apple Computer Inc 1996, all rights reserved.
-
- /*
- 14-Nov-95 : GS : Disposed of all interim descriptors in DoClone().
- */
-
- #include "MSAEClone.h"
-
- #include "MSAEUtils.h"
- #include "MSAECreate.h"
- #include "MSAEGetData.h"
-
-
- #pragma segment AppleEvent
-
-
- // Clone an object - only handles text objects
-
-
- pascal OSErr DoClone(const AppleEvent *theAppleEvent, AppleEvent *reply, long refcon)
- {
- #ifdef __MWERKS__
- #pragma unused (reply, refcon)
- #endif
-
- AEDesc directObj = {typeNull, NULL},
- insertHereDesc = {typeNull, NULL},
- resultDesc = {typeNull, NULL};
- OSErr err;
-
- err = AEGetParamDesc(theAppleEvent, keyDirectObject, typeWildCard, &directObj);
- if (noErr != err) goto done;
-
- err = AEGetParamDesc(theAppleEvent, keyAEInsertHere, typeWildCard, &insertHereDesc);
- if (noErr != err) goto done;
-
- err = GotRequiredParams(theAppleEvent);
- if (noErr != err) goto done;
-
- err = CloneDesc(&directObj, &insertHereDesc, &resultDesc);
- if (noErr != err) goto done;
-
- err = AddResultToReply(&resultDesc, reply, err);
-
- done:
- (void)AEDisposeDesc(&directObj);
- (void)AEDisposeDesc(&insertHereDesc);
- (void)AEDisposeDesc(&resultDesc);
-
- return(err);
- }
-
- OSErr CloneTextDesc(AEDesc* textDesc, AEDesc* insertHereDesc, AEDesc* result)
- {
- TextToken aTextToken;
- Size actualSize;
- AEDesc dataDesc = {typeNull, NULL},
- propertyDesc = {typeNull, NULL}; // Use to pass no properties
- OSErr err;
-
- if (typeMyText != textDesc->descriptorType)
- return(errAETypeError);
-
- GetRawDataFromDescriptor(textDesc, (Ptr)&aTextToken, sizeof(aTextToken), &actualSize);
-
- err = GetTextTextProperty(&aTextToken, &dataDesc);
- if (noErr != err) goto done;
-
- err = CreateText(cText, &dataDesc, insertHereDesc, &propertyDesc, result);
-
- done:
- if (dataDesc.dataHandle)
- AEDisposeDesc(&dataDesc);
-
- return(err);
- }
-
- OSErr CloneDesc(AEDesc* aDesc, AEDesc* insertHereDesc, AEDesc* result)
- {
- AEDesc cloneDesc = {typeNull, NULL},
- textDesc = {typeNull, NULL};
- OSErr err;
-
- if (typeObjectSpecifier == aDesc->descriptorType)
- err = AEResolve(aDesc, kAEIDoMinimum, &cloneDesc);
- else if (typeNull != aDesc->descriptorType)
- err = AEDuplicateDesc(aDesc, &cloneDesc);
-
- if (noErr != err) goto done;
-
- switch (cloneDesc.descriptorType)
- {
- case typeAEList:
- err = errAETypeError;
- // We can't handle copying more than one item to the scrap
- break;
-
- default:
- err = AECoerceDesc(&cloneDesc, typeMyText, &textDesc);
- if (noErr != err) goto done;
- err = CloneTextDesc(&textDesc, insertHereDesc, result);
- }
-
- done:
- (void)AEDisposeDesc(&cloneDesc);
- (void)AEDisposeDesc(&textDesc);
-
- return(err);
- }